
var longitude;
var latitude;
var city_id;
//若指定参数type=baidu，则自动转为百度坐标系
function geoLocation(fc, type) {
	type = type ? type : '';
    var geol;
    try {
        if (typeof(navigator.geolocation) == 'undefined') {
            geol = google.gears.factory.create('beta.geolocation');
        } else {
            geol = navigator.geolocation;
        }
    } catch (error) {
        alert(error.message);
    }

    if (geol) {
        geol.getCurrentPosition(function(position) {
            var nowLatitude = position.coords.latitude;
            var nowLongitude = position.coords.longitude;
			var _callback = function(fc, longitude, latitude) {
				//alert(longitude+':'+latitude);
				//执行回调函数：
				if(fc) {
					if(typeof fc==='function') { fc(longitude, latitude); }
					else {
						eval("fc('"+longitude+"','"+latitude+"')");
					}
				}
			}
			if(type=='baidu') {
				jQuery.ajax({
					url: changePosUrl ? changePosUrl : window.location.href,
					'dataType':'json',
					'data': {'latitude':nowLatitude,'longitude':nowLongitude},
					'type':'POST',
					'success':function(data){
						if(data.code ==0){
							longitude = data['data']['longitude'];
							latitude  = data['data']['latitude'];
							_callback(fc, longitude, latitude);
						}else{
							alert('非常抱歉，我们暂时无法通过浏览器获取您的位置信息，请联系我们。code：2');
						}
					}
				});
			}
			else {
				_callback(fc, nowLongitude, nowLatitude);
			}
        }, function(error) {
            switch(error.code){
                case error.TIMEOUT :
                    alert("连接超时，获取不到您的地理信息,请重试");
                    break;
                case error.PERMISSION_DENIED :
                    alert("您拒绝了使用位置共享服务，需求将不能发送");
                    break;
                case error.POSITION_UNAVAILABLE :
                    alert("非常抱歉，我们暂时无法通过浏览器获取您的位置信息，请联系我们。code：1");
                    break;
            }
        }, {timeout:6000});
    }
}


var EARTH_RADIUS = 6378137.0; //单位M
var PI = Math.PI;

function getRad(d){
    return d*PI/180.0;
}

/**
 * caculate the great circle distance
 * @param {Object} lat1
 * @param {Object} lng1
 * @param {Object} lat2
 * @param {Object} lng2
 */
function getGreatCircleDistance(lat1,lng1,lat2,lng2){
    var radLat1 = getRad(lat1);
    var radLat2 = getRad(lat2);

    var a = radLat1 - radLat2;
    var b = getRad(lng1) - getRad(lng2);

    var s = 2*Math.asin(Math.sqrt(Math.pow(Math.sin(a/2),2) + Math.cos(radLat1)*Math.cos(radLat2)*Math.pow(Math.sin(b/2),2)));
    s = s*EARTH_RADIUS;
    s = Math.round(s*10000)/10000.0;

    return s;
}

/**
 * approx distance between two points on earth ellipsoid
 * @param {Object} lat1
 * @param {Object} lng1
 * @param {Object} lat2
 * @param {Object} lng2
 */
function getFlatternDistance(lat1,lng1,lat2,lng2){
    var f = getRad((lat1 + lat2)/2);
    var g = getRad((lat1 - lat2)/2);
    var l = getRad((lng1 - lng2)/2);
    var sg = Math.sin(g);
    var sl = Math.sin(l);
    var sf = Math.sin(f);
    alert(sg+':'+sl+':'+sf);
    var s,c,w,r,d,h1,h2;
    var a = EARTH_RADIUS;
    var fl = 1/298.257;
    sg = sg*sg;
    sl = sl*sl;
    sf = sf*sf;
    s = sg*(1-sl) + (1-sf)*sl;
    c = (1-sg)*(1-sl) + sf*sl;
    w = Math.atan(Math.sqrt(s/c));
    r = Math.sqrt(s*c)/w;
    d = 2*w*a;
    h1 = (3*r -1)/2/c;
    h2 = (3*r +1)/2/s;
    return d*(1 + fl*(h1*sf*(1-sg) - h2*(1-sf)*sg));
}

function mouseCoords(obj,ev)  {
    if(ev.pageX || ev.pageY){
        return {x:ev.pageX, y:ev.pageY};
    }
    return{
        x:ev.clientX + obj.scrollLeft - obj.clientLeft,
        y:ev.clientY + obj.scrollTop - obj.clientTop
    };
}


